package com.whfc.ms.api.fuum.controller;

import com.whfc.common.result.Result;
import com.whfc.common.result.ResultUtil;
import com.whfc.common.util.SessionAttr;
import com.whfc.fuum.entity.AppContract;
import com.whfc.fuum.entity.SysUser;
import com.whfc.ms.api.fuum.service.ContractService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Date;

/**
 * 项目管理-合同管理
 */
@RestController
@RequestMapping("/ms/api/contract")
public class ContractController {

    @Autowired
    private ContractService contractService;

    /**
     * 获取合同详情
     * 
     * @param id 主键ID
     * @return 合同详情
     */
    @GetMapping("/detail/{id}")
    public Result getInfo(@PathVariable Integer id) {
        return ResultUtil.success(contractService.getById(id));
    }

    /**
     * 查询合同列表
     * 
     * @param deptId       所属单位ID
     * @param contractName 合同名称
     * @return 合同列表
     */
    @GetMapping("/list")
    public Result list(@RequestParam(required = false) Integer deptId,
            @RequestParam(required = false) String contractName) {
        return ResultUtil.success(contractService.list(deptId, contractName));
    }

    /**
     * 新增合同
     * 
     * @param user     当前登录用户
     * @param contract 合同实体
     * @return 操作结果
     */
    @PostMapping("/add")
    public Result add(@SessionAttribute(SessionAttr.MS_USER) SysUser user,
            @RequestBody AppContract contract) {
        // 设置创建人和更新人信息
        contract.setCreateUser(user.getId());
        contract.setUpdateUser(user.getId());
        contract.setCreateTime(new Date());
        contract.setUpdateTime(new Date());
        contract.setUploadUserId(user.getId());
        contract.setUploadUserName(user.getUsername());
        contract.setUploadTime(new Date());
        return ResultUtil.success(contractService.save(contract));
    }

    /**
     * 更新合同
     * 
     * @param user     当前登录用户
     * @param contract 合同实体
     * @return 操作结果
     */
    @PostMapping("/update")
    public Result edit(@SessionAttribute(SessionAttr.MS_USER) SysUser user,
            @RequestBody AppContract contract) {
        // 设置更新人信息
        contract.setUpdateUser(user.getId());
        contract.setUpdateTime(new Date());
        return ResultUtil.success(contractService.update(contract));
    }

    /**
     * 删除合同
     * 
     * @param id 主键ID
     * @return 操作结果
     */
    @PostMapping("/delete/{id}")
    public Result remove(@PathVariable Integer id) {
        return ResultUtil.success(contractService.delete(id));
    }

    /**
     * 批量删除合同
     * 
     * @param ids 主键ID列表
     * @return 操作结果
     */
    @PostMapping("/deleteBatch")
    public Result removeBatch(@RequestBody List<Integer> ids) {
        return ResultUtil.success(contractService.deleteBatch(ids));
    }
}